"use strict";

const Service = require("egg").Service;

/**
 * 企业微信服务
 */
class WechatService extends Service {
  /**
   * 获取微信AccessToken
   * 
   * 1. 开发者需要缓存access_token，用于后续接口的调用（注意：不能频繁调用gettoken接口，否则会受到频率拦截）。
   * 2. 当access_token失效或过期时，需要重新获取。
   * 参考文档 - https://work.weixin.qq.com/api/doc#90000/90135/91039
   */
  async getAccessToken() {
    const { ctx, config } = this;
    const { corpid, corpsecret } = config.qywechat;
    let accessToken = await ctx.service.cache.get("wwtoken");
    if (accessToken) return accessToken;
    // 使用egg内置的HttpClient：https://eggjs.org/zh-cn/core/httpclient.html
    const result = await ctx.curl(
      `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corpid}&corpsecret=${corpsecret}`,
      {
        dataType: "json"
      }
    );
    if (result && result.data && result.data.errcode == 0) {
      accessToken = result.data.access_token;
      await ctx.service.cache.setex("wwtoken", accessToken, 7200);
    }else {
      console.log("getAccessToken errr")
    }
    return accessToken;
  }
}

module.exports = WechatService;
